import { KnowledgeBaseParams } from '@types'

import BaseReranker from './BaseReranker'
import DefaultReranker from './DefaultReranker'
import JinaReranker from './JinaReranker'
import SiliconFlowReranker from './SiliconFlowReranker'
import VoyageReranker from './VoyageReranker'

/**
 * 重排序器工厂类
 * 根据传入参数自动选择并实例化合适的重排序器
 */
export default class RerankerFactory {
  /**
   * 工厂方法，根据 rerankModelProvider 字段选择重排序器
   * @param base 知识库参数
   * @returns 对应的重排序器实例
   */
  static create(base: KnowledgeBaseParams): BaseReranker {
    // silicon 服务
    if (base.rerankModelProvider === 'silicon') {
      return new SiliconFlowReranker(base)
      // jina 服务
    } else if (base.rerankModelProvider === 'jina') {
      return new JinaReranker(base)
      // voyageai 服务
    } else if (base.rerankModelProvider === 'voyageai') {
      return new VoyageReranker(base)
    }
    // 默认重排序器
    return new DefaultReranker(base)
  }
}
